import requests
from lxml import etree
import os
import os.path

#可以看出所有的网站的爬取都是这几个步骤，
    # 可以写一个大的类，
    # 然后爬取哪个网站都去继承这个类，
    # 从而可以提高代码的复用率
#创建一个类，这个类包括爬虫的所有步骤，
    # 1.发送请求
    # 2.相应数据，对数据进行处理
    # 3.存储数据
class Soogif(object):


    def __init__(self):
        self.url='https://www.soogif.com/'
        self.headers={
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
        }


    #发送请求
    #向服务器发送请求
    def send_request(self,url):
        res=requests.get(url=url,headers=self.headers)
        return res.content


    #服务器响应，返回数据给客户端
    #清洗数据
    def filter_data(self,data,rule):
        element=etree.HTML(data)
        url_list=element.xpath(rule)
        return url_list


    #保存数据，入库 
    def save_data(self,data,name):
        name=name.split('/')[-1]
        path='download'
        if not os.path.exists(path):
            os.mkdir(path)
        with open(f'{path}/{name}','wb') as fp:
            fp.write(data)


    #调度方法，媒介,见名知义
    def run(self):
        #根据首页的url向服务器发出请求
        res_data=self.send_request(self.url)

        #根据请求回来的数据找到分类的url
        img_rule='//div[@class="nav-section-container"]/a/@href'
        img_url_lsit=self.filter_data(res_data,img_rule)

        #根据分类的url找到分页的url
        img_url=self.url+img_url_lsit[1]
        page=[img_url+'?pageSize=28&pageNumber={}'.format(i) for i in range(0,17)]
        for page_num in page:
            # print(page_num)
            #根据分类分页的url在一次向服务器发出请求
            page_data=self.send_request(page_num)

            #根据请求回来的内容获取获取页面中图片的url
            page_xpath='//div[@class="up clearfix"]/a/figure/div/video/@src'
            page_url_list=self.filter_data(page_data,page_xpath)

            for page_url in page_url_list:
                print(page_url)

                #根据动图的url向服务器发出请求
                res=self.send_request(page_url)
                
                #根据服务器返回的内容，保存数据到文件里
                self.save_data(res,page_url)


if __name__ == "__main__":
    my=Soogif()
    my.run()




